MySQL Python - MYSQL教程

MySQL Python 连接与使用

MySQL 是最流行的开源关系型数据库之一,而 Python 是当今最受欢迎的编程语言之一。将 Python 与 MySQL 结合使用,可以让我们轻松地开发数据库驱动的应用程序。

本文将详细介绍如何使用 Python 连接和操作 MySQL 数据库,内容包含如下:

  1. 如何安装 MySQL Python 驱动
  2. 建立和关闭数据库连接
  3. 执行各种 SQL 查询
  4. 事务管理和错误处理
  5. 数据库操作的最佳实践

准备工作

安装必要的软件

在开始之前,请确保你已经安装了以下软件:

  • Python (推荐 3.6 或更高版本)
  • MySQL Server (社区版即可)
  • MySQL Connector/Python (Python 的 MySQL 驱动)

安装 MySQL Connector/Python

可以通过 pip 安装 MySQL 官方提供的 Python 驱动:


pip install mysql-connector-python

或者安装 PyMySQL (另一个流行的 MySQL Python 驱动):


pip install pymysql

连接 MySQL 数据库

建立基本连接

以下是使用 mysql-connector-python 建立数据库连接的基本代码:

示例代码
importmysql.connector# 创建数据库连接db=mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="yourdatabase")print("数据库连接成功!")

连接参数说明

  • host : MySQL 服务器地址 (本地为 "localhost")
  • user : 数据库用户名
  • password : 用户密码
  • database : 要连接的数据库名称 (可选)

使用 PyMySQL 连接

如果你选择使用 PyMySQL,连接方式略有不同:

示例代码
importpymysql# 创建数据库连接db=pymysql.connect(host="localhost",user="yourusername",password="yourpassword",database="yourdatabase")print("数据库连接成功!")

执行 SQL 查询

创建游标对象

在执行 SQL 语句前,我们需要创建一个游标(cursor)对象:

示例代码
cursor=db.cursor()

执行 SELECT 查询

示例代码
cursor.execute("SELECT * FROM your_table")# 获取所有结果results=cursor.fetchall()forrowinresults:print(row)

执行 INSERT, UPDATE, DELETE 操作

示例代码
# 插入数据sql="INSERT INTO users (name, age) VALUES (%s, %s)"values=("张三",25)cursor.execute(sql,values)# 提交事务db.commit()print(cursor.rowcount,"条记录插入成功")

使用参数化查询

为了防止 SQL 注入,应该始终使用参数化查询:

示例代码
sql="SELECT * FROM users WHERE name = %s"name=("张三",)cursor.execute(sql,name)

事务管理

事务的基本概念

MySQL 事务是一组原子性的 SQL 查询,要么全部执行成功,要么全部不执行。

使用事务

示例代码
try:# 开始事务cursor.execute("START TRANSACTION")# 执行多个SQL语句cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE id = 1")cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE id = 2")# 提交事务db.commit()print("事务执行成功")exceptExceptionase:# 发生错误,回滚事务db.rollback()print("事务执行失败:",e)

错误处理

捕获数据库错误

示例代码
try:cursor.execute("SELECT * FROM non_existent_table")exceptmysql.connector.Erroraserr:print("数据库错误:",err)

常见错误代码

  • 1045 : 访问被拒绝 (错误的用户名或密码)
  • 1049 : 未知数据库
  • 1146 : 表不存在
  • 1062 : 重复键值

关闭连接

正确关闭连接

完成数据库操作后,应该关闭游标和连接:

示例代码
cursor.close()db.close()print("数据库连接已关闭")

使用 with 语句

Python 的 with 语句可以自动管理资源:

示例代码
withmysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="yourdatabase")asdb:withdb.cursor()ascursor:cursor.execute("SELECT * FROM users")results=cursor.fetchall()forrowinresults:print(row)# 离开with块后连接会自动关闭

最佳实践

连接池

对于频繁连接数据库的应用,建议使用连接池:

示例代码
frommysql.connectorimportpooling# 创建连接池db_pool=pooling.MySQLConnectionPool(pool_name="mypool",pool_size=5,host="localhost",user="yourusername",password="yourpassword",database="yourdatabase")# 从连接池获取连接db=db_pool.get_connection()

ORM 框架

对于复杂应用,可以考虑使用 ORM (对象关系映射) 框架,如 SQLAlchemy 或 Django ORM。